package com.yunhan.security;

import cn.hutool.core.lang.UUID;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;


public class JWTUtils {
    //私钥
    private static final String TOKEN_SECRET = "yunhan";

    //负载信息
    private static final String UID = "uid";


    /**
     * 获取token：base64(header)，base64(playload)，signature(根据header和playload和私钥生成)
     *
     * @return 加密的token
     * 过去时间是恒定的不能自动刷新过期时间
     */
    public static String sign(String uid) {
        Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET); //对私钥使用HMAC256加密

        //使用默认的header，有设置过期时间
        return JWT.create()
                .withClaim(UID, uid)             //负载信息中可以添加一些当前用户的相关信息
                .withClaim("uuid", UUID.randomUUID().toString(true))    //添加一个随机的负载信息
                .sign(algorithm);
    }


    public static String getUid(String token) {
        JWTUtils.verify(token);
        DecodedJWT jwt = JWT.decode(token);
        return jwt.getClaim(UID).asString();

    }

    private static void verify(String token) {
        Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
        JWTVerifier verifier = JWT.require(algorithm).build();
        verifier.verify(token);
    }

}

